package orderEvaluate

import (
	"web/models"
	"web/pkg/util"
)

type FillOrderEvaluateService struct {
	// 移除Ctx字段，不再使用context
}

// NewFillOrderEvaluateService 创建填充服务实例
func NewFillOrderEvaluateService() *FillOrderEvaluateService {
	return new(FillOrderEvaluateService)
}

// FillOne 填充单个订单评价的关联数据
func (s *FillOrderEvaluateService) FillOne(evaluate *models.LaOrderEvaluate, fillOptions util.FillOption) {
	if evaluate == nil {
		return
	}

	// 根据填充选项填充关联数据
	for key, enabled := range fillOptions {
		if !enabled {
			continue
		}

		switch key {
		case "order":
			s.fillOrder(evaluate)
		case "user":
			s.fillUser(evaluate)
		case "reply":
			s.fillReply(evaluate)
		case "images":
			s.fillImages(evaluate)
		}
	}
}

// Fill 批量填充订单评价的关联数据
func (s *FillOrderEvaluateService) Fill(evaluates []*models.LaOrderEvaluate, fillOptions util.FillOption) {
	if len(evaluates) == 0 {
		return
	}

	// 根据填充选项决定填充内容
	for key, enabled := range fillOptions {
		if !enabled {
			continue
		}

		switch key {
		case "order":
			s.batchFillOrders(evaluates)
		case "user":
			s.batchFillUsers(evaluates)
		case "reply":
			s.batchFillReplies(evaluates)
		case "images":
			s.batchFillImages(evaluates)
		}
	}
}

// fillOrder 填充订单信息
func (s *FillOrderEvaluateService) fillOrder(evaluate *models.LaOrderEvaluate) {
	// 这里可以填充订单的详细信息
	// 例如：获取对应的订单数据并设置到evaluate结构中
	// 由于LaOrderEvaluate结构中没有预留字段，这里仅作演示
	// 实际使用时可能需要扩展模型结构
}

// fillUser 填充用户信息
func (s *FillOrderEvaluateService) fillUser(evaluate *models.LaOrderEvaluate) {
	// 这里可以填充用户的详细信息
	// 例如：根据Uid获取用户详情
	// 注意匿名评价时需要处理用户信息
}

// fillReply 填充回复信息
func (s *FillOrderEvaluateService) fillReply(evaluate *models.LaOrderEvaluate) {
	// 这里可以填充商家对评价的回复信息
}

// fillImages 填充评价图片
func (s *FillOrderEvaluateService) fillImages(evaluate *models.LaOrderEvaluate) {
	// 这里可以填充评价相关的图片信息
}

// batchFillOrders 批量填充订单信息
func (s *FillOrderEvaluateService) batchFillOrders(evaluates []*models.LaOrderEvaluate) {
	// 收集所有订单ID
	orderIDs := make([]uint64, 0, len(evaluates))
	orderIDMap := make(map[uint64]bool)

	for _, evaluate := range evaluates {
		if !orderIDMap[evaluate.OrderID] {
			orderIDs = append(orderIDs, evaluate.OrderID)
			orderIDMap[evaluate.OrderID] = true
		}
	}

	// 批量查询订单信息（这里仅作演示）
	// 实际实现时可以查询相关订单数据并填充到evaluates中
}

// batchFillUsers 批量填充用户信息
func (s *FillOrderEvaluateService) batchFillUsers(evaluates []*models.LaOrderEvaluate) {
	// 收集所有用户ID (非匿名评价)
	userIDs := make([]int, 0, len(evaluates))
	userIDMap := make(map[int]bool)

	for _, evaluate := range evaluates {
		// 只为非匿名评价填充用户信息
		if evaluate.IsAnony == 0 && !userIDMap[evaluate.Uid] {
			userIDs = append(userIDs, evaluate.Uid)
			userIDMap[evaluate.Uid] = true
		}
	}

	// 批量查询用户信息（这里仅作演示）
	// 实际实现时可以查询相关用户数据并填充到evaluates中
}

// batchFillReplies 批量填充回复信息
func (s *FillOrderEvaluateService) batchFillReplies(evaluates []*models.LaOrderEvaluate) {
	// 收集所有评价ID
	evaluateIDs := make([]uint, 0, len(evaluates))

	for _, evaluate := range evaluates {
		evaluateIDs = append(evaluateIDs, uint(evaluate.ID))
	}

	// 批量查询回复信息（这里仅作演示）
	// 实际实现时可以查询相关回复数据并填充到evaluates中
}

// batchFillImages 批量填充评价图片
func (s *FillOrderEvaluateService) batchFillImages(evaluates []*models.LaOrderEvaluate) {
	// 收集所有评价ID
	evaluateIDs := make([]uint, 0, len(evaluates))

	for _, evaluate := range evaluates {
		evaluateIDs = append(evaluateIDs, uint(evaluate.ID))
	}

	// 批量查询图片信息（这里仅作演示）
	// 实际实现时可以查询相关图片数据并填充到evaluates中
}
